home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 4440 < prev    next >
Encoding:
Internet Message Format  |  1996-08-05  |  3.3 KB

  1. Path: keats.ugrad.cs.ubc.ca!not-for-mail
  2. From: c2a192@ugrad.cs.ubc.ca (Kazimir Kylheku)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: why not add getch() to the std C RTL?
  5. Date: 4 Feb 1996 09:16:25 -0800
  6. Organization: Computer Science, University of B.C., Vancouver, B.C., Canada
  7. Message-ID: <4f2pl9INNmmm@keats.ugrad.cs.ubc.ca>
  8. References: <DM85L8.5Jn@emr1.emr.ca> <bnelsonDM887t.LDI@netcom.com>
  9. NNTP-Posting-Host: keats.ugrad.cs.ubc.ca
  10.  
  11. In article <bnelsonDM887t.LDI@netcom.com>,
  12. Bob Nelson <bnelson@netcom.com> wrote:
  13. >On Sun, 4 Feb 1996 00:05:32 GMT, John Grant wrote:
  14. >
  15. >> There are *many* people who want to do the following in their C programs:
  16. >> - read a single unbuffered keystroke (getch() in DOS, ioctl in unix...)
  17. >> The usual response is "not standard C, o/s-specific" etc.
  18. >
  19. >I'll just quote the following from "Expert C Programming" by Peter van
  20. >der Linden (ISBN 0-13-177429-8) and offer no comments of my own, other
  21. >than some emphasis added.  Instead, it'll be interesting to see how
  22. >participants in comp.lang.c respond to what PvdL thinks (especially in
  23. >the context of your posting). Here's the paragraph from page 213:
  24. >
  25. >"People often wonder why ANSI C didn't define a standard function to
  26. >get a character if a key has been pressed. Without a standard
  27. >function, every system has a different method and program portability
  28. >is lost.  The argument against providing kbhit() as part of the
  29. >standard is that *it is mostly useful for GAMES software* and there
  30. >are many other terminal I/O features that are not standardized. In
  31. >addition, you don't want to promise a standard library function *that
  32. >SOME OS's will find difficult to provide.* The argument for providing
  33. >it is that it is mostly useful for games software and that games
  34. >writers don't need the myriad of other terminal I/O features that
  35. >could be standardized. Whichever view you hold, it's true the XJ311
  36. >missed an opportunity to reinforce C as the language of choice for a
  37. >generation of programmers writings games on UNIX."
  38. >
  39. >Comments? 
  40.  
  41. More comments:
  42.  
  43. Suppose kbhit() were part of the standard. That's not enough to encourage game
  44. programming. You also want, even for text-based games, full-screen control.
  45. Implementing kbhit() is trivial compared to terminal control. Including
  46. curses-like functionality in the standard would bloat it immensely with
  47. functions that are irrelevant for most people.
  48.  
  49. This lack did not stop that "generation of game programmers". Instead, they
  50. poured back some brewski's and developed the BSD curses library which, by the
  51. mid 80's, AT&T snatched to develop a more powerful version for AT&T UNIX.
  52.  
  53. Furthermore, kbhit() is obsoleted with the advent of graphics, which is what
  54. game programmers are ultimately interested in. Is kbhit() still used under
  55. Microsoft Windows? X11 doesn't use it; an X program receives events, some of
  56. which can be keypress and keyrelease events---which gives you far more general
  57. semantics that are akin to the PC's "scan codes". An X11 game can sense that a
  58. key is held down independently of other keys, in a standard manner that works
  59. on all X terminals.
  60.  
  61. (Check out the controls for xpilots---idependent firing, rotation, thrust and
  62. shields and other commands).
  63.  
  64. This is not something you can do having only the functionality of kbhit().
  65. In fact, it's not even possible with ordinary terminal I/O, unless you have a
  66. special terminal that can pass you press/release codes.
  67. -- 
  68.  
  69.